\chapter{Resolución}
\subsection{Hipótesis Planteadas}
\begin{itemize}
	\item La fecha tomada en todos los casos donde se podía optar tiene el formato:
	\begin{center} dd-mm-yyyy \end{center}
	%\item Los campos monetarios se ha optado por considerarlos en centavos.
\end{itemize}

\subsection{Instrucciones de Instalación}
\begin{enumerate}
	\item Ubicarse dentro del directorio sobre el cual se desee instalar el componente.
	\item Crear en el directorio un subdirectorio llamado grupo06.
	\item Dar permisos de escritura, en caso que no los tenga, al directorio recién creado.
	\item Copiar el archivo *.tgz en el directorio.
	\item Descomprimir el *.tgz de manera de generar un *.tar.
	\item Extraer los archivos del tar. El directorio actual será llamado {\ttfamily \$CURRENT\_DIR} de aquí en más.
	\item Posicionarse dentro del directorio inst/.
	\item Ejecutar instalars.bash. Para más información sobre éste comando utilice la opción "-h".
\end{enumerate}

Una vez instalado el componente NO deben, bajo ninguna circunstancia, modificarse los permisos sobre ninguna de las carpetas u archivos propios del sistema.

Recuerde que el archivo de configuración, {\ttfamily segmentar.conf}, es utilizado constantemente por el componente; por lo que el mismo no debe modificarse ni alterarse de ninguna manera, caso contrario no se garantiza el correcto funcionamiento del sistema.

\subsection{Casos de prueba}
Debido a que las pruebas no son parte del componente, las mismas serán extraídas al directorio del punto 1 en una carpeta llamada test\_suite.

Cada caso unitario de test posee una descripción y, además, una estructura de directorios por defecto.

Las primeras 9 pruemas suministradas son unitarias, y deben ser preparadas a mano. En cambio la prueba 10 y 11 pueden ser preparadas con el comando {\ttfamily settest.sh.}

Es MUY importante que para ejecutar las pruebas mueva manualmente los archivos de testing dentro de las carpetas correponpondientes a la instalación, tenga en cuenta que si modificó los parámetros durante la instalación será necesario cambiar la estructura de los test como se muestra a continuación:
\begin{itemize}
	\item Test Case 10 sobre Instalación por defecto:
	\begin{enumerate}
		\item Posicionarse dentro de {\ttfamily /\$CURRENT\_DIR/test\_suite/test10/.}
		\item Mover los archivos ubicados en {\ttfamily /conf/} a {\ttfamily /\$CURRENT\_DIR/conf/.}
		\item Mover las carpetas y arhivos ubicados en {\ttfamily /data/} a {\ttfamily /\$CURRENT\_DIR/data/.}
		\item Correr el test.
	\end{enumerate}
	\item Test Case 10 sobre Instalación Customizada:
	\begin{enumerate}
		\item Para éste punto se llamará al diretorio de datos {\ttfamily DATA\_DIRR}, el mismo es el establecido or el usuario durante la instalación del sistema.
		\item Posicionarse dentro de {\ttfamily /\$CURRENT\_DIR/test\_suite/test10/.}
		\item Mover los archivos ubicados en {\ttfamily /conf/} a {\ttfamily /\$CURRENT\_DIR/conf/.}
		\item Mover las carpetas y arhivos ubicados en {\ttfamily /data/} a {\ttfamily /\$CURRENT\_DIR/\$DATA\_DIR/.}
		\item Correr el test.
	\end{enumerate}
\end{itemize}

\subsubsection{Comandos auxiliares de pruebas}
	El comando {\ttfamily settest.sh} prepara todo para utilizar la prueba pasada en el primer parametro, actualmente solo funciona con la prueba 10 y 11. \\
	ADVERTENCIA: Este comando es de uso interno, utiliza path relativos pues debe ser ejecutado desde el directorio {\ttfamily test\_suite.}
	Por ejemplo {\ttfamily settest.sh 11}: \\
	Copia los archivos de configuracion de la carpeta {\ttfamily test\_suite/test11/conf} en {\ttfamily CURRDIR/conf}

	El directorio {\ttfamily test\_suite} tambien contiene otros comandos auxiliares que contruyen archivos de datos:
	Todos tienen el mismo comportamiento, generar registros y los imprimen por pantalla. Esto lleva la finalidad de armar archivos de prueba (por ejemplo de centrales) de la siguiente manera: \\
	{\ttfamily ./gencentrales.sh >centrales.test} \\
	Cargando en este caso en el achivo {\ttfamily centrales.test} un grupo de centrales de prueba.
	\begin{itemize}
		\item ./genmorosos.sh
		\item ./gencentrales.sh
		\item ./gencampanas.sh.
		\item ./genuniverso.sh
		\item ./genclientes.sh <cantidad de clientes>
	\end{itemize}
	Cada uno de estos comandos presenta una descripción mas detallada en su código fuente.

	Así mismo las pruebas que se ubican cada una en un directorio separado contienen un archivo {\ttfamily descripcion}, donde se detalle la finalidad de la misma.
	
\section{Esqueleto de los demonios}
Tanto el demonio {\ttfamily detectar.bash} como el {\ttfamily TRUNCAR}, sigue la estructura que se especifica a continuación:
\begin{itemize}
	\item Al lanzar el demonio sin parámetros se llama a la función ARRANCAR. Esta función primero chequea que el demonio no esté ya en ejecución, de ser así, graba en el archivo de errores, con formato de error: \\
	{\ttfamily El demonio <nom\_demonio> ya está corriendo} \\
	Y se sale con código de retorno 1. 
	\item Luego chequea que el entorno esté inicializado (variable {\ttfamily \$INICIAR\_EXECUTED=1} ), si así no lo fuera, imprime por salida estándar: \\
	{\ttfamily Error: debe ejecutar el comando INICIAR antes de ejecutar $<$4nom\_demonio$>$} \\
	Y se sale con código de retorno 2. Si ambos chequeos son exitosos, entonces ARRANCAR llama a la función BUCLE. Esta función contiene un blucle while infinito corriendo en background, dentro de este bucle se encuentra el proceso del demonio.
	\item Para finalizar el demonio, se debe ejecutar el mismo con el parámetro {\ttfamily finalizar}.
	\item El demonio DETECTAR contiene además la función FORM\_LOG, la cual se encarga de obtener la fecha y hora actual para armar el formato de log a utilizar por los comandos que escriban logs.

\section{Registros de ejecución}
	Para obtener una escritura uniforme entre los logs de los distintos comandos y el de error, se ha optado por utilizar 3 variables de entorno, las cuales aparecen en el archivo de configuración: \\
{\ttfamily
035: FORM\_LOG = \$(date +\%d/\%m/\%y\ \%T)-\$(whoami)- \\
036: FORM\_ERR = \$(date +\%d/\%m/\%y\ \%T)-\$(whoami)-\${0\#\#*/}- \\
037: ERR\_FILE = \$CURRENT\_DIR/conf/error.log
\\}
	De esta manera todas las impresiones son uniformes y evitamos un comando adicional.

%\section{Instrucciones de Ejecución}

